#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 25;
int n, m, k;
bool flag[N][N];
double dp[N][N];
// int dx[2] = {0, -1}, dy[2] = {-1, 0};
bool check(int i, int j)
{
    if(i <= 0 || i > n || j <= 0 || j > m) return true;
    return false;
}
int main()
{
    while(cin >> n >> m >> k)
    {
        memset(flag, 0, sizeof flag);
        // memset(dp_all, 0, sizeof dp_all);
        memset(dp, 0, sizeof dp);

        for(int i = 0; i < k; ++i)
    {
        int x, y;
        cin >> x >> y;
        flag[x][y] = true;
    }
    // 每条路径的概率不一样
    dp[1][1] = 1;
    if(flag[1][1] || flag[n][m]) printf("%.2lf\n", 0.);
    else
    {
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= m; ++j)
            {

                if (!flag[i][j]) {
                    if (!flag[i - 1][j])
                        dp[i][j] += j == m ? dp[i - 1][j] : dp[i - 1][j] / 2;
                    if (!flag[i][j - 1])
                        dp[i][j] += i == n ? dp[i][j - 1] : dp[i][j - 1] / 2;
                }
            }
        printf("%.2lf\n", dp[n][m]);
    }

    }
    // 2. 总共有几条路线不会碰到蘑菇
    // cout << dp_all[n][m] << endl;
    return 0;
}
